#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Init();
    Connect();
    setCentralWidget(ui->textEdit);//把UI中的文本编辑器给加到最大
}

void MainWindow::Connect()
{
    connect(_spinFontSize,SIGNAL(valueChanged(int)),this,SLOT(on_spinBoxFontSize_valueChanged(int)));
    connect(_comboBox,SIGNAL(currentIndexChanged(const QString&)),this,SLOT(on_comboFont_currentIndexChanged(const QString &)));
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::Init(void)
{

    _qq=new QQueue<QString>;
    _flabCUrFile=new QLabel;//当前文件的标签
    _flabCUrFile->setMidLineWidth(150);//设置这个的最小宽度
    _flabCUrFile->setText("当前文件: ");
    ui->statusBar->addWidget(_flabCUrFile);//添加到UI的状态栏中

    _progrecessBar=new QProgressBar;
    _progrecessBar->setMaximumWidth(200);
    _progrecessBar->setMinimum(5);
    _progrecessBar->setMaximum(50);
    _progrecessBar->setValue(ui->textEdit->font().pointSize());
    ui->statusBar->addWidget(_progrecessBar);


    _spinFontSize=new QSpinBox;
    _spinFontSize->setMinimum(5);
    _spinFontSize->setMaximum(50);
    ui->mainToolBar->addWidget(new QLabel("字体大小"));//添加到maintoolBar这个对象中
    ui->mainToolBar->addWidget(_spinFontSize);

    _comboBox=new QFontComboBox;
    ui->mainToolBar->addWidget(new QLabel("字体"));
    ui->mainToolBar->addWidget(_comboBox);

}

void MainWindow::on_actionBold_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt=ui->textEdit->currentCharFormat();//保留当前状态
    if(checked)
        fmt.setFontWeight(QFont::Bold);
    else
        fmt.setFontWeight(QFont::Normal);
    ui->textEdit->mergeCurrentCharFormat(fmt);//重新配置
}

void MainWindow::on_actionUnderline_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt=ui->textEdit->currentCharFormat();//保留当前状态

    fmt.setFontUnderline(checked);

    ui->textEdit->mergeCurrentCharFormat(fmt);//重新配置
}

void MainWindow::on_actionItalic_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt=ui->textEdit->currentCharFormat();//保留当前状态
    fmt.setFontItalic(checked);
    ui->textEdit->mergeCurrentCharFormat(fmt);//重新配置
}


void MainWindow::on_textEdit_copyAvailable(bool b)
{
    ui->actionCut->setEnabled(b);
    ui->actionCopy->setEnabled(b);
    ui->actionPaste->setEnabled(ui->textEdit->canPaste());
}

void MainWindow::on_textEdit_selectionChanged()
{
    //更新粗体、斜体、下划线3种action的checked属性
    QTextCharFormat fmt;
    fmt=ui->textEdit->currentCharFormat();   //获取文字的格式
    ui->actionItalic->setChecked(fmt.fontItalic());  //是否斜体
    ui->actionBold->setChecked(fmt.font().bold());  //是否粗体
    ui->actionUnderline->setChecked(fmt.fontUnderline()); //是否有下划线
}

void MainWindow::on_spinBoxFontSize_valueChanged(int aFontSize)
{//改变字体大小的SpinBox的响应
    QTextCharFormat fmt;
    fmt.setFontPointSize(aFontSize); //设置字体大小
    ui->textEdit->mergeCurrentCharFormat(fmt);
    _spinFontSize->setValue(aFontSize);
}
void MainWindow::on_comboFont_currentIndexChanged(const QString &arg1)
{
    //FontCombobox的响应，选择字体名称
    QTextCharFormat fmt;
    fmt.setFontFamily(arg1);//设置字体名称
    ui->textEdit->mergeCurrentCharFormat(fmt);
}

void MainWindow::updateCurFile(QString aFile)
{//更新当前文件名，并更新状态栏提示
    _fCurFileName=aFile;
    QString tmp="当前文件："+_fCurFileName;
    _flabCUrFile->setText(tmp);
}

void MainWindow::on_actionNew_file_triggered()
{
    //新建文件
    ui->textEdit->clear();
    updateCurFile("");
}

void MainWindow::on_actionOpen_triggered()
{
    QString curPath,aFileName;
    curPath=QCoreApplication::applicationDirPath(); //获取应用程序的路径

    //调用打开文件对话框打开一个文件
    aFileName=QFileDialog::getOpenFileName(this,tr("打开一个文件"),curPath,
                 "C++程序文件(*.cpp);;H头文件(*.h);;文本文件(*.txt);;所有文件(*.*)");

    if (!aFileName.isEmpty())
    {
        QFile aFile(aFileName);  //以文件方式读出
        if (aFile.open(QIODevice::ReadWrite | QIODevice::Text))
        {
            QTextStream aStream(&aFile); //用文本流读取文件
            while (!aStream.atEnd())
                ui->textEdit->append(aStream.readLine()); //读取一个文本行
            updateCurFile(aFileName); //更新状态栏显示
        }
        aFile.close();//关闭文件流
    }

}


void MainWindow::on_actionSave_triggered()//只负责保存文件以及其操作
{
    QFileDialog fileDialog;
    QString filename=fileDialog.getSaveFileName(this,"")




}
